package com.yuw.tcpnetwork;

import java.io.*;
import java.net.Socket;

public class ClientThread extends Thread {
    @Override
    public void run() {
        // 创建字符流的对象
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            // 创建一个客户端Socket对象
            // 第一个 参数： 服务器的IP地址；127.0.0.1 、localhost 表示本机； 第二个参数是服务器的端口号，需要和服务器保持一致
            Socket socket = new Socket("127.0.0.1", 9090);

            ///////////////////////////////////客户端向服务器发送消息///////////////////////////////////
            // 向服务器发送信息【使用socked的输出流发送信息】
            bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
            // 发送给服务器的信息
            bw.write("客户端：Hello,你好服务器，这里是客户端");
            System.out.println("客户端：Hello,你好服务器，这里是客户端");
            bw.newLine(); // 添加行结束符，否则信息会在缓存中，等待输入结束才发送；  行结束符就是发送的标志
            // 根据通信的习惯，通信双发规定一个结束的符号
            // 通信结束了
            bw.write("0over0");
            bw.newLine();
            bw.flush(); // 清空缓存区，进行发送
            /////////////////////////////////////////////////////////////////////////////////////////

            //////////////////////////////////////客户端接收服务器端发送的消息//////////////////////////
            // 读取客户端的socket对象的输入流，可接收到服务器端的发送信息
            // 输入流对象
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // 从socket中的输入流中读取服务器端发送的信息
            // 如果是多行的需要使用循环读取
            // 默认值为null
            String str = null;
            do {
                str = br.readLine();
                // 将读取的字符串内容输出
                System.out.println("客户端：我是客户端，我接受到服务器的信息了：" + str);
            } while (str != null && !str.equals("0over0")); // 0over0 通信结束符

            /////////////////////////////////////////////////////////////////////////////////////////

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 通信未结束之前，先不进行资源回收
        }


    }
}
